package fifteenth.Class类的使用;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
class Person1{
    private String name;
    private int age;
    public Person1(String name,int age){
        this.setName(name);
        this.setAge(age);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "姓名："+this.name+",年龄："+this.age;
    }
}
public class 调用有参构造实例化对象 {
    public static void main(String[] args) throws InvocationTargetException, InstantiationException, IllegalAccessException, ClassNotFoundException {
        Class<?> c =null;
        Constructor<?> cons[]= null;
        c= Class.forName("fifteenth.Class类的使用.Person1");
        cons=c.getConstructors();//获得构造方法
        Person1 p =null;
        //向构造方法中传递参数，此方法使用可变参数接收，并实例化对象
        p= (Person1) cons[0].newInstance("小飞侠",18);//因为只有一个构造，所以数组下标为0，在声明对象数组的时候，必须考虑到构造方法中参数的顺序，
        // 所以第一个参数的类型为String,第二个参数的类型是Integer(在使用时候会自动拆箱）
        //构造方法参数顺序：String name,int age  实例方法参数顺序：”小飞侠“，18
        System.out.println(p);//输出对象
    }
}
/*
D:\WorkSpaces\Java\jdk-21\bin\java.exe "-javaagent:D:\Software\IntelliJ IDEA\IntelliJ IDEA 2023.3.2\lib\idea_rt.jar=55084:D:\Software\IntelliJ IDEA\IntelliJ IDEA 2023.3.2\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath D:\WorkSpaces\JavaDevelopBase_start_329\out\production\JavaDevelopBase_start_329 fifteenth.Class类的使用.调用有参构造实例化对象
姓名：小飞侠,年龄：18

Process finished with exit code 0
 */